home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-02-19 | 10.4 KB | 298 lines | [TEXT/CWIE] |
- /*
- File: AbstractSearchSpec.c
-
- Contains: xxx put contents here xxx
-
- Written by: Andy Nicholas, Greg Anderson, Tom Conrad, Chris Bingham, Georgiann Puckett, John Thompson-Rohrlich
-
- Copyright: © 1994-1995 by Apple Computer, Inc., all rights reserved.
-
- <19> 9/18/95 ga
-
- */
-
-
- #ifdef MWTRACEBACKTABLES
- #pragma traceback on
- #endif
-
- #include "AbstractSearchSpec.h"
-
- #include "AbstractScriptableObject.h"
- #include "ScriptableObjectList.h"
-
- //
- // GenericSearchEngine is needed because a
- // TGenericSearchEngine is created by default
- // in TAbstractSearchSpec::CreateSearchEngine
- //
- //#include "GenericSearchEngine.h"
-
- #include <AEObjects.h>
-
- #include "Exceptions.h"
-
- //========================================================================================
- // CLASS TAbstractSearchSpec
- //========================================================================================
-
- #ifndef clSearchSpec
- #define clSearchSpec 5689
- #endif
-
- #pragma segment ObjectResident
- ImplementSmallClassData(TAbstractSearchSpec, clSearchSpec);
-
- #pragma segment SearchSpec
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::SpecificationOperator:
- //
- // This function returns the operator performed by this specification
- //----------------------------------------------------------------------------------------
- DescType TAbstractSearchSpec::SpecificationOperator()
- {
- return typeNull;
- } // TAbstractSearchSpec::SpecificationOperator
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::NumberOfSubterms
- //----------------------------------------------------------------------------------------
- long TAbstractSearchSpec::NumberOfSubterms()
- {
- return 0;
- }
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::SpecificationForTerm
- //----------------------------------------------------------------------------------------
- TAbstractSearchSpec* TAbstractSearchSpec::SpecificationForTerm(long /*term*/)
- {
- return nil;
- }
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::AccessBySearchSpec
- //----------------------------------------------------------------------------------------
- void TAbstractSearchSpec::AccessBySearchSpec(const TAETransaction& t, TAbstractCollector* collector, DescType desiredClass, TAbstractScriptableObject* objectToSearch)
- {
- objectToSearch->AccessBySearchSpec(t, collector, desiredClass, this);
- } // TAbstractSearchSpec::AccessBySearchSpec
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::BuildObjectSpecifier:
- //----------------------------------------------------------------------------------------
- TDescriptor TAbstractSearchSpec::BuildObjectSpecifier(DescType desiredClass, TDescriptor rootOfSearch)
- {
- TDescriptor specifier;
- TDescriptor whoseTest;
-
- whoseTest = this->BuildWhoseTest();
- specifier.MakeObjectSpecifier(desiredClass, rootOfSearch, formTest, whoseTest, true);
-
- return specifier;
- } // TAbstractSearchSpec::BuildObjectSpecifier
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::BuildWhoseTest:
- //----------------------------------------------------------------------------------------
- TDescriptor TAbstractSearchSpec::BuildWhoseTest()
- {
- TDescriptor specifier;
-
- FailErr(errAEEventNotHandled);
-
- return specifier;
- } // TAbstractSearchSpec::BuildWhoseTest
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::GetRightHandComparisonOperand
- //----------------------------------------------------------------------------------------
- TComparisonOperand* TAbstractSearchSpec::GetRightHandComparisonOperand()
- {
- return nil;
- }
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::GetLeftHandComparisonOperand
- //----------------------------------------------------------------------------------------
- TComparisonOperand* TAbstractSearchSpec::GetLeftHandComparisonOperand()
- {
- return nil;
- }
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::AddTermToSpecification
- //----------------------------------------------------------------------------------------
- TAbstractSearchSpec* TAbstractSearchSpec::AddTermToSpecification(TAbstractSearchSpec* newSpecification)
- {
- AListOf<TAbstractSearchSpec*>* specificationList = new AListOf<TAbstractSearchSpec*>;
-
- specificationList->Add(this);
- specificationList->Add(newSpecification);
-
- return new TLogicalSearchSpec(kAEAND, specificationList);
- } // TAbstractSearchSpec::AddTermToSpecification
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::CreateSearchEngine:
- //----------------------------------------------------------------------------------------
- TAbstractSearchEngine* TAbstractSearchSpec::CreateSearchEngine()
- {
- FailErr(errAEEventNotHandled);
-
- return nil;
- } // TAbstractSearchSpec::CreateSearchEngine
-
-
- //----------------------------------------------------------------------------------------
- // TAbstractSearchSpec::CreateSearchEngines:
- //----------------------------------------------------------------------------------------
- void TAbstractSearchSpec::CreateSearchEngines(TSearchEngineList* /*searchEngines*/, TAbstractScriptableObject* /*owner*/)
- {
- } // TAbstractSearchSpec::CreateSearchEngines
-
- //----------------------------------------------------------------------------------------
- // TViewerSpec::ShouldSearch:
- //----------------------------------------------------------------------------------------
- #pragma segment ViewerIdle
- Boolean TAbstractSearchSpec::ShouldSearch (TAbstractScriptableObject* /*disk*/)
- {
- return true;
- } // TAbstractSearchSpec::ShouldSearch
-
-
- //========================================================================================
- // CLASS TLogicalSearchSpec
- //========================================================================================
-
- #pragma segment ObjectResident
- ImplementSmallClassData(TLogicalSearchSpec, clLogicalSearchSpec);
-
- #pragma segment SearchSpec
-
- //----------------------------------------------------------------------------------------
- // TLogicalSearchSpec::~TLogicalSearchSpec:
- //----------------------------------------------------------------------------------------
- TLogicalSearchSpec::~TLogicalSearchSpec()
- {
- delete fListOfLogicalTerms;
- } // TLogicalSearchSpec::~TLogicalSearchSpec
-
- //----------------------------------------------------------------------------------------
- // TLogicalSearchSpec::SpecificationOperator:
- //----------------------------------------------------------------------------------------
- DescType TLogicalSearchSpec::SpecificationOperator()
- {
- return fLogicalOperator;
- } // TLogicalSearchSpec::SpecificationOperator
-
- //----------------------------------------------------------------------------------------
- // TLogicalSearchSpec::NumberOfSubterms
- //----------------------------------------------------------------------------------------
- long TLogicalSearchSpec::NumberOfSubterms()
- {
- return fListOfLogicalTerms->ItemsInList();
- }
-
- //----------------------------------------------------------------------------------------
- // TLogicalSearchSpec::SpecificationForTerm
- //----------------------------------------------------------------------------------------
- TAbstractSearchSpec* TLogicalSearchSpec::SpecificationForTerm(long term)
- {
- return (TAbstractSearchSpec*) fListOfLogicalTerms->ItemAtIndex(term);
- }
-
- //----------------------------------------------------------------------------------------
- // TLogicalSearchSpec::Compare:
- //----------------------------------------------------------------------------------------
- Boolean TLogicalSearchSpec::Compare(const TAETransaction& t, TAbstractScriptableObject* itemToTest)
- {
- //
- // If the logical operator is not kAEOR, then kAEAND is
- // assumed (thus, kAENOT is really kAENAND).
- //
- Boolean result = this->SpecificationOperator() == kAEOR ? false : true;
-
- //
- // Compare each of the subspecifications of this logical spec
- //
- for(AnIteratorOfAListOf<TAbstractSearchSpec*> iter(fListOfLogicalTerms); iter.More(); iter.Next())
- {
- Boolean intermediate = iter.Current()->Compare(t, itemToTest);
-
- //
- // Once again, we treat kAEOR specially, and all other
- // operations (kAEAND and kAENOT) are treated as AND
- //
- if(this->SpecificationOperator() == kAEOR)
- {
- result |= intermediate;
- if(result)
- break;
- }
- else
- {
- result &= intermediate;
- if(!result)
- break;
- }
- }
-
- //
- // Negate the result if the logical operator is kAENOT.
- //
- if(this->SpecificationOperator() == kAENOT)
- result = !result;
-
- return result;
- } // TLogicalSearchSpec::Compare
-
- //----------------------------------------------------------------------------------------
- // TLogicalSearchSpec::BuildWhoseTest:
- //----------------------------------------------------------------------------------------
- TDescriptor TLogicalSearchSpec::BuildWhoseTest()
- {
- TDescriptor specifierOfTerms;
- TDescriptor listOfTerms;
- TDescriptor oneTerm;
- TDescriptor logicalOperator;
-
- //
- // Create an AE record
- //
- specifierOfTerms.MakeAERecord();
-
- //
- // Make a logical operator to go inside the record
- //
- logicalOperator.SetDescTypeData(this->SpecificationOperator(), typeEnumeration);
- specifierOfTerms.PutDescriptorParameter(keyAELogicalOperator, logicalOperator);
- logicalOperator.Dispose();
-
- //
- // Build a list of specifiers for all of the terms
- // in this search specification
- //
- for(AnIteratorOfAListOf<TAbstractSearchSpec*> iter(fListOfLogicalTerms); iter.More(); iter.Next())
- {
- oneTerm = iter.Current()->BuildWhoseTest();
- listOfTerms.AddItemToList(oneTerm);
- oneTerm.Dispose();
- }
- specifierOfTerms.PutDescriptorParameter(keyAELogicalTerms, listOfTerms);
- listOfTerms.Dispose();
-
- return specifierOfTerms;
- } // TLogicalSearchSpec::BuildWhoseTest
-
- //----------------------------------------------------------------------------------------
- // TLogicalSearchSpec::AddTermToSpecification
- //----------------------------------------------------------------------------------------
- TAbstractSearchSpec* TLogicalSearchSpec::AddTermToSpecification(TAbstractSearchSpec* newSpecification)
- {
- fListOfLogicalTerms->Add(newSpecification);
-
- return this;
- } // TLogicalSearchSpec::AddTermToSpecification
-